package fr.nts.framework.front.service;

import java.util.List;

import javax.annotation.Resource;

import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import com.google.common.collect.Lists;

import fr.nts.framework.database.jpa.dao.SimpleMenuDao;
import fr.nts.framework.database.jpa.model.common.SimpleMenu;

/**
 * Le gestionnaire des menus
 * 
 * @author sco
 * @version 1.0.0
 */
@Component("menuManager")
public class MenuManager{

	private final static Logger log = LoggerFactory.getLogger(MenuManager.class);
	
    @Resource
    private SimpleMenuDao ntsMenuDao;
    
    /**
     * Indique si les menus ont déjà ét chargé
     */
    private boolean hasBeenInit = false;
    
    /**
     * La liste des menus parent
     */
    private List<SimpleMenu> parentMenus = Lists.newArrayList();
    
    /**
     * Permet de réinitialiser les menus
     */
    public void reloadMenus(){
		parentMenus = ntsMenuDao.findAllParentMenus();
		
		for(SimpleMenu menu: parentMenus){
    		log.debug("Menu parent récupéré: {}", menu);
    	}
    }

    
    /**
     * Récupère la liste des menus
     */
    public List<SimpleMenu> getParentMenus(){
    	if(!hasBeenInit){
    		reloadMenus();
    	}
    	
		return parentMenus;
	}
    
    
    /***
     * Recupère un menu via son identifiant
     * 
     * @param id L'id du menu
     * @return Un menu
     */
    public SimpleMenu findMenuById(final String id){
    	
    	if(StringUtils.isEmpty(id)){
    		return null;
    	}
    	
    	Long lId = null;
    	try{
    		lId = Long.valueOf(id);
    	}catch(Exception e){
    		log.warn("L'id du menu {} n'est pas au bon format.", id);
			return null;
		}
    	
    	return ntsMenuDao.findById(lId);
    }
    
    
	// GETTER / SETTER
	public void setParentMenus(List<SimpleMenu> parentMenus){
		this.parentMenus = parentMenus;
	}
}